package com.gt.utils;

import org.springframework.util.StringUtils;

import java.math.BigDecimal;
import java.util.List;


/**
 * StringUtils工具类
 * @author  jiangzhj
 * @date 2019-11-27
 */
public class StringUtil {
	public static String getStringValue(Object obj){
		if(obj==null){
			return "";
		}
		return obj.toString();
	}

	public static int getStringLength(String str){
		if(str==null){
			return 0;
		}
		return str.getBytes().length;
	}

	public static boolean hasValue(Object o){
		if(o==null||o.toString().trim().equals("")||o.toString().trim().equalsIgnoreCase("null")){
			return false;
		}
		return true;
	}

	public static boolean isNumber(String str){
		if(str==null || "".equals(str)){
			return false;
		}
		String reg="^[-|+]?\\d*([.]\\d+)?$";
		return str.matches(reg);
	}

	public static int toInteger(String str){
		return Integer.parseInt(str);
	}

	/**
	 * 功能：把数字转化成字符串， 并根据长度在前面补0
	 *
	 * @author 研发部 。
	 * @param val
	 * @param len
	 * @return
	 *
	 */
	public static String switchToString(int val, int len) {
		String strVal = "" + val;
		int strLen = strVal.length();
		if (strVal.length() < len) {
			for (int i = 0; i < len - strLen; ++i) {
				strVal = "0" + strVal;
			}
		}
		return strVal;
	}

	  /**
     * 传入空�?得时候返回空�?否则返回去掉�?��和结尾的空格
     *
     * @param obj
     * @return
     */
    public static String getTrimValue(Object obj)
    {
        return obj == null ? "" : obj.toString().trim();
    }

    /**
     * 将数组转换为制定字符串隔�?��字符串�?
     *
     * @param array
     *            数组
     * @param split
     *            分割�?
     * @return
     */
    public static String arrayToString(int[] array, String split)
    {
        if (array == null || array.length == 0)
            return "";
        String result = "";
        for (int i = 0; i < array.length - 1; i++)
            result += array[i] + split;
        result += array[array.length - 1];
        return result;
    }

    /**
     * 将集合转换为制定字符串隔�?��字符串�?
     *
     * @param
     *            数组
     * @param split
     *            分割�?
     * @return
     */
    @SuppressWarnings({ "unchecked", "rawtypes" })
	public static String listToString(List list, String split)
    {
        if (list == null)
            return "";
        Object[] array = list.toArray(new Object[list.size()]);
        return arrayToString(array, split);
    }

    /**
     * 将数组转换为制定字符串隔�?��字符串�?
     *
     * @param array
     *            数组
     * @param split
     *            分割�?
     * @return
     */
    public static String arrayToString(Object[] array, String split)
    {
        return arrayToString(array, split, null);
    }

    /**
     * 将数组转换为制定字符串隔�?��字符串�?
     *
     * @param array
     *            数组
     * @param split
     *            分割�?
     * @return
     */
    public static String arrayToString(Object[] array, String split,
            String valueWrapper)
    {
        if (array == null || array.length == 0)
            return "";
        String result = "", strWrapper = (valueWrapper == null ? ""
                : valueWrapper);
        for (int i = 0; i < array.length - 1; i++)
            result += strWrapper + array[i] + strWrapper + split;
        result += strWrapper + array[array.length - 1] + strWrapper;
        return result;
    }

    /**
     * 取得文件后缀�?例如XXXX.txt 返回.txt)，没有返回空�?
     *
     * @param fileName
     * @return
     */
    public static String getFileNameSuffix(String fileName)
    {
        if (fileName == null || fileName.trim().equals(""))
            return "";
        int index = fileName.lastIndexOf(".");
        if (index == -1)
            return "";
        return fileName.substring(index, fileName.length());
    }

    public static boolean isNull(Object obj)
    {
        if (obj == null)
            return true;
        if (obj.toString().trim().equals("")
                || "null".equalsIgnoreCase(obj.toString()))
            return true;
        return false;
    }

    // /**
    // * 将长字符串截为短的，保存到DWRBean对象�?
    // * 结果存放在LIST中�?
    // * @param longTableHTML
    // * @return
    // */
    // public static ArrayList convertToBeanList(String longTableHTML) {
    // return convertToBeanList(longTableHTML,21);
    // }

    // /**
    // * 将长字符串截为短的，保存到DWRBean对象�?
    // * 结果存放在LIST中�?
    // * @param longTableHTML 原来的字符串
    // * @param newLength 之后的长�?
    // * @return
    // */
    // public static ArrayList convertToBeanList(String longTableHTML,int
    // newLength) {
    // if (longTableHTML == null)return null;
    // longTableHTML = longTableHTML.trim();
    // int count = longTableHTML.length()/newLength;
    //
    // if (longTableHTML.length() % newLength != 0)
    // count ++;
    //
    // ArrayList list = new ArrayList(count);
    //
    // for(int i=0;i<count;i++) {
    // int endIndex = i*newLength + newLength;
    // if (endIndex > longTableHTML.length())
    // endIndex = longTableHTML.length();
    // DWRBean bean = new DWRBean();
    // bean.setShortHTML(longTableHTML.substring(i*newLength,endIndex));
    // //System.out.println("count="+count+" i="+i+" html="+bean.getShortHTML());
    // list.add(bean);
    // }
    // return list;
    // }
    /**
     * @param sql
     *            sql语句
     * @param fieldName
     *            字段�?
     * @return
     */
    /*
     * private static String getSingleValue(String sql,String fieldName) { try {
     * HashMap map = DBQueryUtil.query(sql); ArrayList
     * list=(ArrayList)map.get(fieldName.toUpperCase()); return
     * String.valueOf(list.get(0)); } catch (Exception ex) {
     * ex.printStackTrace(); return null; } }
     */
    /**
     * 字符串转成Long�?str为空时返回空
     *
     * @param str
     * @return
     */
    public static Long stringToLong(String str)
    {
        if (isNull(str))
        {
            return null;
        }
        else
        {
            return Long.valueOf(str);
        }

    }

    /**
     * 转换为double<br>
     * 如果给定的值为空，或者转换失败，返回默认值<br>
     * 转换失败不会报错
     *
     * @param value        被转换的值
     * @param defaultValue 转换错误时的默认值
     * @return 结果
     */
    public static Double toDouble(Object value, Double defaultValue) {
        if (value == null) {
            return defaultValue;
        }
        if (value instanceof Double) {
            return (Double) value;
        }
        if (value instanceof Number) {
            return ((Number) value).doubleValue();
        }
        final String valueStr = toStr(value);
        if (StringUtils.isEmpty(valueStr)) {
            return defaultValue;
        }
        try {
            // 支持科学计数法
            if (valueStr.indexOf("%") > 0) {
                return new BigDecimal(valueStr.trim().replace("%", "")).doubleValue() / 100;
            } else {
                return new BigDecimal(valueStr.trim()).doubleValue();
            }
        } catch (Exception e) {
            return defaultValue;
        }
    }

    /**
     * 转换为字符串<br>
     * 如果给定的值为null，或者转换失败，返回默认值<br>
     * 转换失败不会报错
     *
     * @param value        被转换的值
     * @return 结果
     */
    public static String toStr(Object value) {
        if (null == value) {
            return "";
        }
        if (value instanceof String) {
            return (String) value;
        }
        return value.toString();
    }

    /**
     * 转换为double<br>
     * 如果给定的值为空，或者转换失败，返回默认值<code>0</code><br>
     * 转换失败不会报错
     *
     * @param value 被转换的值
     * @return 结果
     */
    public static Double toDouble(Object value) {
        return toDouble(value, 0.0);
    }

    /**
     * 字符串是否等于空�?
     *
     * @param
     * @return
     */
    public static boolean isNotEmpty(String str)
    {
        if (str == null)
        {
            return false;
        }
        str = str.trim();
        if ("".equals(str))
        {
            return false;
        }
        if ("null".equalsIgnoreCase(str))
        {
            return false;
        }
        return true;
    }

    /**
     * 元转分
     * @return
     */
    public static String changeY2F(String str){
        return new BigDecimal(str).multiply(new BigDecimal(100)).stripTrailingZeros().toPlainString();
    }

    /**
     * 分转元
     * @return
     */
    public static String changeF2Y(String str){
        return new BigDecimal(str).divide(new BigDecimal(100)).stripTrailingZeros().toPlainString();
    }

    /**
     * 判断是否大于
     */
    public static boolean isMoreThan(BigDecimal a,BigDecimal b){
        return a.stripTrailingZeros().compareTo(b.stripTrailingZeros())>0;
    }

    /**
     * 判断是否等于
     */
    public static boolean isEqual(BigDecimal a,BigDecimal b){
        return a.stripTrailingZeros().compareTo(b.stripTrailingZeros())==0;
    }

    /**
     * 判断是否小于
     */
    public static boolean isLessThan(BigDecimal a,BigDecimal b){
        return a.stripTrailingZeros().compareTo(b.stripTrailingZeros())<0;
    }

    /**
     * 判断是否不等于
     */
    public static boolean isNoEqual(BigDecimal a,BigDecimal b){
        return a.stripTrailingZeros().compareTo(b.stripTrailingZeros())!=0;
    }
}
